package fr.bugtracker.entity.technique;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

import fr.bugtracker.commun.enumeration.EnumParametreApplication;
import fr.bugtracker.dao.technique.IdentifiableEntity;

/**
 * Classe entité des paramètres de l'application
 */
@Entity
@Table(name = "parametre_application")
public class ParametreApplication implements IdentifiableEntity {

	/**
	 * identifiant technique
	 */
	@Id
	@Column(name = "code", unique = true, length = 50)
	@Enumerated(EnumType.STRING)
	private EnumParametreApplication code;
	/**
	 * la valeur du paramètre
	 */
	@Column(name = "valeur", length = 150)
	private String valeur;
	/**
	 * description du parametre
	 */
	@Column(name = "description", length = 150)
	private String description;

	/**
	 * Constructeur de la classe <code>Role</code>.
	 */
	public ParametreApplication() {
	}

	/**
	 * @see fr.bugtracker.dao.technique.IdentifiableEntity#getId()
	 */
	@Override
	public EnumParametreApplication getId() {
		return code;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut code.</b></p>
	 * @return Retourne l'attribut code sous forme de <code>EnumParametreApplication</code>.
	 */
	public EnumParametreApplication getCode() {
		return code;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut code.</b></p>
	 * @param pCode L'attribut code à modifier.
	 */
	public void setCode(EnumParametreApplication pCode) {
		code = pCode;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut valeur.</b></p>
	 * @return Retourne l'attribut valeur sous forme de <code>String</code>.
	 */
	public String getValeur() {
		return valeur;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut valeur.</b></p>
	 * @param pValeur L'attribut valeur à modifier.
	 */
	public void setValeur(String pValeur) {
		valeur = pValeur;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut description.</b></p>
	 * @return Retourne l'attribut description sous forme de <code>String</code>.
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut description.</b></p>
	 * @param pDescription L'attribut description à modifier.
	 */
	public void setDescription(String pDescription) {
		description = pDescription;
	}

	/**
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof ParametreApplication)) {
			return false;
		}
		ParametreApplication other = (ParametreApplication) obj;
		return new EqualsBuilder().append(code, other.code).isEquals();
	}

	/**
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder(17, 37).append(code).toHashCode();
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		StringBuilder vBuilder = new StringBuilder();
		vBuilder.append("ParametreApplication [code=").append(code).append(", valeur=").append(valeur).append(", description=").append(description).append("]");
		return vBuilder.toString();
	}

}